/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package our.gui;

/**
 *
 * @author keysman
 */
public class ourPanel extends javax.swing.JPanel {
    private boolean _KeyFrame = false;

    public ourPanel()
    {
        super();
        /*addComponentListener(new java.awt.event.ComponentAdapter() {
            public void componentShown(java.awt.event.ComponentEvent evt) {
                ourPanelComponentShown(evt);
            }
        });*/
    }

    /**
     * Restituisce un array di Objects composta dagli oggetti 'our' che sono in chiave
     * @return
     */
    public Object[] getFieldsInKeyFrame()
    {
        if(this.isKeyFrame()==false) return null;

        int iNumElements = getComponentCount(); // Numero di elementi
        int iKeyFlds = 0;
        for(int i=0; i<iNumElements; i++)
        {
            if(this.getComponent(i).getClass().getName().indexOf("ourLabel")<0) iKeyFlds++;
        }

        if(iKeyFlds==0) return null; // Non ci sono selementi

        Object[] objTmp = new Object[iKeyFlds];
        int iCount = 0;
        for(int i=0; i<iNumElements; i++)
        {
            if(getComponent(i).getClass().getName().indexOf("ourLabel")<0)
            {
                if(getComponent(i).getClass().getName().indexOf("ourTextField")>=0)
                {
                    ourTextField txtTmp = (ourTextField)getComponent(i);
                    objTmp[iCount++] = txtTmp;
                }
            }
        }

        return objTmp;




        /*int i = 0;
        Object[] objTmp = new Object[50]; // 50 è un valore fittizio..
        java.awt.Component[] cmp = getComponents();
        int iTot = 0;
        for(i=0; i<cmp.length; i++)
        {
            if(cmp[i].getClass().getName().indexOf("ourTextField")>=0)
            {
                ourTextField txtTmp = (ourTextField)cmp[i];
                objTmp[i] = txtTmp;
                iTot++;
            }
            if(cmp[i].getClass().getName().indexOf("ourPanel")>=0)
            {
                ourPanel pnlTmp = (ourPanel)cmp[i];
                if(pnlTmp.isKeyFrame())
                {
                    Object[] embedded = pnlTmp.getFieldsInKeyFrame();
                    for(int z=0; z<embedded.length; z++)
                        System.out.println(embedded[z].toString());
                }
            }

        }
        Object[] objRet = new Object[iTot];
        int iCounter = 0;
        for(int x=0; x<i; x++) 
        {
            if(objTmp[x]!=null) objRet[iCounter++] = objTmp[x];
        }
        System.out.println("*** Aggiungere le condizioni per le altre tipologie ****");
        return objRet;*/
    }

    public void showAsterisks()
    {
        boolean bFoundFirstElement = false;
        // Per ogni elemento appartenente al keyframe setto la proprietà corretta
        java.awt.Component[] cmp = getComponents();
        for(int i=0; i<cmp.length; i++)
        {
            if(cmp[i].getClass().getName().indexOf("TextField")>=0)
            {
                ourTextField txtTmp = (ourTextField)cmp[i];
                if(isKeyFrame()) 
                {
                    txtTmp.SETTINGS.setFieldInKeyFrame(true);
                    if(!bFoundFirstElement)
                    {
                        txtTmp.SETTINGS.setIsFirstOfKeyFrame(true);
                        bFoundFirstElement = true;
                    }
                }
                txtTmp.showAsterisk();            
            }

            if(cmp[i].getClass().getName().indexOf("Label")>=0)
            {
                ourLabel lblTmp = (ourLabel)cmp[i];
                if(isKeyFrame()) lblTmp.SETTINGS.setFieldInKeyFrame(true);
            }
        }

        System.out.println("**** in ourPanel::showAsterisk devi aggiungere il codice per le altre tipologie di oggetto ****");

    }

    public void showAsterisks2()
    {
        // Cerco tutti gli elementi all'interno del pannello e mostro l'asterisco
        boolean bRet = true;
        try {
            // Tramte reflection leggo tutti gli elementi appartenenti alla form
            java.lang.reflect.Field[] flds = getClass().getDeclaredFields();
            // Ciclo tutti gl oggetti
            for(int i=0; i<flds.length; i++)
            {
                // Identifico un singolo field
                java.lang.reflect.Field field = this.getClass().getDeclaredField(flds[i].getName());
                // Lo rendo accessibile
                field.setAccessible(true);
                // Lascio la prima condizione per retrocompatibilità con oggetti del tipo non our.gui puri.
                if( field.getType().toString().indexOf("our.gui")>=0 )
                {
                    if(field.getType().toString().indexOf("TextField")>=0)
                    {
                        ClassAsterisk pnlAsterisk = new ClassAsterisk();
                        add(pnlAsterisk);
                        pnlAsterisk.setBounds(getX() - 10, getY() + 5, 9, 9);
                        javax.swing.JTextField txtTmp = (javax.swing.JTextField)field.get(this);
                        pnlAsterisk.setBounds(txtTmp.getX() - 10, txtTmp.getY() + 5, 9, 9);
                    }
/************************************************************************************************************************************
 * Nel caso in cui in chiave ci possano essere altre tipologie di controlli, bisogna aggiungere il codice per la lettura del valore *
 ************************************************************************************************************************************/
                }
            }
        } catch(Throwable t) {
            t.printStackTrace();
        }
    }

    private void ourPanelComponentShown(java.awt.event.ComponentEvent evt)
    {
        // Cerco tutti gli elementi all'interno del pannello e mostro l'asterisco
        boolean bRet = true;
        try {
            // Tramte reflection leggo tutti gli elementi appartenenti alla form
            java.lang.reflect.Field[] flds = getClass().getDeclaredFields();
            // Ciclo tutti gl oggetti
            for(int i=0; i<flds.length; i++)
            {
                // Identifico un singolo field
                java.lang.reflect.Field field = this.getClass().getDeclaredField(flds[i].getName());
                // Lo rendo accessibile
                field.setAccessible(true);
                // Lascio la prima condizione per retrocompatibilità con oggetti del tipo non our.gui puri.
                if( field.getType().toString().indexOf("our.gui")>=0 )
                {
                    if(field.getType().toString().indexOf("TextField")>=0)
                    {
                        ClassAsterisk pnlAsterisk = new ClassAsterisk();
                        add(pnlAsterisk);
                        pnlAsterisk.setBounds(getX() - 10, getY() + 5, 9, 9);
                        javax.swing.JTextField txtTmp = (javax.swing.JTextField)field.get(this);
                        pnlAsterisk.setBounds(txtTmp.getX() - 10, txtTmp.getY() + 5, 9, 9);
                    }
/************************************************************************************************************************************
 * Nel caso in cui in chiave ci possano essere altre tipologie di controlli, bisogna aggiungere il codice per la lettura del valore *
 ************************************************************************************************************************************/
                }
            }
        } catch(Throwable t) {
            t.printStackTrace();
        }
    }

    class ClassAsterisk extends javax.swing.JPanel {
        java.awt.Image image = null;
        @Override
        public void paint(java.awt.Graphics g)
        {
            g.drawImage(image, 0, 0, this);
        }

        public ClassAsterisk()
        {
            javax.swing.ImageIcon ico = new javax.swing.ImageIcon(getClass().getResource("/magazzjno/img/required.gif"));
            image = ico.getImage();
            setBounds(0, 0, 9, 9);
            setVisible(true);
        }
    }



    public boolean isKeyFrame() {
        return _KeyFrame;
    }

    public void setKeyFrame(boolean isKeyFrame) {
        this._KeyFrame = isKeyFrame;
    }





}
